package com.lwl.jvm.classloading;

/**
 * <pre>
 * 类从被加载到虚拟机内存中到卸载出内存开始生命周期:
 *     加载,
 *     连接(验证,准备,解析),
 *     初始化,
 *     使用,
 *     卸载
 * 以下几种情况触发类初始化(不是对象初始化)
 * 1 使用new关键字实例化对象,读取或
 * 设置一个类的静态字段(使用final修饰,已在编译期把结果放入常量池的静态字段除外)
 * 以及调用一个类的静态方法的时候
 * 2 使用java.lang.reflect包的方法对类进行反射调用的时候
 * 3 当初始化一个类的时候,如果发现其父类没有初始化,需要先初始化其父类的初始化
 * 4 当虚拟机启动时用户需要指定主类,虚拟机会先初始化这个主类
 * 5 当使用jdk1.7的动态语言支持时
 * 注意:一个接口在初始化时不需要父接口全部完成初始化,只有在正真使用接口才会初始化(如引用接口中的常量)
 * 被动使用字段演示1:
 *    通过子类引用父类的静态字段,不会导致类初始化
 * </pre>
 * @author lwl  2017年12月24日 下午7:39:57
 */
public class SupperClass {
	static{
	   System.out.println("SupperClass init!");
	}
	public static int value = 123;
}
